package com.tang.model.clone;

import java.util.Date;

/**
 * @Author sisyphus
 * @DATE 2022/4/27 7:52
 * @Desc
 * @Remarks
 */
public class CarTest {

    public static void main(String[] args) throws CloneNotSupportedException {
        Car car = new Car("奥迪", new Date());
        Car newCar = car.clone();

        System.out.println("原对象：" + car);
        System.out.println("克隆对象：" + newCar);

        newCar.setName("奔驰");
        System.out.println("原对象名称：" +car.getName());
        System.out.println("克隆对象名称：" +newCar.getName());
        /**
         * 浅拷贝方法
         *    @Override
         *     protected Car clone() throws CloneNotSupportedException {
         *         return (Car) super.clone();
         *     }
         * 获取克隆对象的日期，修改时间属性，发现两个对象的date值都已经修改
         * 说明两个对象的DATE是同一个对象的引用
         * 说明浅拷贝并没有拷贝date对象
         */
        newCar.getDate().setTime(123131231);
        System.out.println("原对象日期：" +car.getDate());
        System.out.println("克隆对象日期：" +newCar.getDate());

        /**
         * 深拷贝方法：
         *   @Override
         *     protected Car clone() throws CloneNotSupportedException {
         *         Car clone = (Car) super.clone();
         *         clone.date = (Date) this.date.clone();
         *         return clone;
         *     }
         *
         * 获取克隆对象的日期，修改时间属性，发现两个对象的date值都已经修改
         * 说明两个对象的DATE是同一个对象的引用
         * 说明浅拷贝并没有拷贝date对象
         */
        newCar.getDate().setTime(123131231);
        System.out.println("原对象日期：" +car.getDate());
        System.out.println("克隆对象日期：" +newCar.getDate());
    }
}
